//
//  CZTabBar.swift
//  WHWeiBo01
//
//  Created by whitcast on 16/7/9.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
//  定义协议必须继承NSObjectProtocol, 才能用weak关键对属性进行弱引用
protocol CZTabBarDelegate: NSObjectProtocol {
    func didSelectedComposeButton()
}


class CZTabBar: UITabBar {
    //  点击点击撰写按钮的闭包
    var composeButtonClosure: (()->())?
    //  定义代理对象
    weak var czDelegate: CZTabBarDelegate?
    
    // MARK:    --懒加载控件
    private lazy var composeButton: UIButton = {
        let button = UIButton()
        //  添加点击事件
        button.addTarget(self, action: "composeButtonAction", forControlEvents: .TouchUpInside)
        //  设置图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
        //  设置背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: .Normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: .Highlighted)
        
        button.sizeToFit()
        return button
    }()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        addSubview(composeButton)
        
    }
    // 加载xib或者storyboard才会调用
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // MARK: -- 点击事件
    
    //  使用private修饰函数在我们swift的运行循环里面是找不到, swift是编译型语言,在编译的时候就要知道我们要调用哪个函数,因为swift追求性能
    
    //  解决办法 - @objc
    
    //  @objc 表示我们使用oc的动态运行机制调用这个函数
    @objc private func composeButtonAction() {
    
        print("哈哈哈")
        //  使用'?'判断这个闭包是否为nil,如果为nil,则不执行后面代码,否则执行
        composeButtonClosure?()
        //  使用代理对象调用
        czDelegate?.didSelectedComposeButton()
    }
    
    
    override func layoutSubviews() {
        super.layoutSubviews()
        //  设置撰写按钮的中心点
        composeButton.centerX = width * 0.5
        composeButton.centerY = height * 0.5
        //  获取系统控件
        //  计算控件的宽度
        let itemWidth = width / 5
        //  记录遍历是第一个按钮
        var index = 0
        for value in subviews {
            //  这个类是私有 UITabBarButton.self 获取class
            if value.isKindOfClass(NSClassFromString("UITabBarButton")!) {
                value.x = CGFloat(index) * itemWidth
                value.width = itemWidth
                if index == 1 {
                    index++
                }
                index++
            }
        
        }
        
        
        
        
        
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

}
